package org.raymond.icloud.apis.admin.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import org.raymond.icloud.apis.admin.entity.enums.StateEnum;
import org.raymond.icloud.common.core.mybatis.entity.AbstractEntity;

import javax.validation.constraints.NotEmpty;

/**
 * 子级组织继承父级组织的角色, 父级组织包含子级组织的用户组
 * 比如一个集团组织具有进出集团大楼大门的权限,该集团的所有员工都有进出大门的权限.
 * 但是集团总部是集团下的一个组织,与集团某分公司的组织级别同级.则集团总部员工具有进入总部办公室的权限,而分公司的员工不具有进入总部办公室的权限
 * 某些情况下,需要对部分子级组织的权限进行限制,比如进入离职流程的员工不允许翻阅其原属部门内部公开的文档,则该员工应被移至离职流程的用户组,
 * 该用户组归属某部门离职员工这个组织,该组织的是否继承父级角色,为false
 */
@Data
@Builder
@EqualsAndHashCode(onlyExplicitlyIncluded=true, callSuper = false)
@TableName("t_sys_org")
public class TSysOrg extends AbstractEntity {
    @ApiModelProperty(name="id", value = "组织Id", dataType="Long")
    @TableId(value="id", type= IdType.ASSIGN_ID)
    @EqualsAndHashCode.Include
    private Long id;

    @ApiModelProperty(name="name", value = "组织名称", dataType="String")
    @NotEmpty(message = "name不能为空")
    @TableField("name")
    private String name;

    @ApiModelProperty(name="code", value = "组织编码", dataType="String")
    @NotEmpty(message = "code不能为空")
    @TableField("code")
    private String code;

    @ApiModelProperty(name="parentId", value = "父级Id", dataType="Long")
    @TableField("parent_id")
    private Long parentId;

    @ApiModelProperty(name="inheritanceUserGroup", value = "是否从父级继承用户组, 0-false, 1-true", dataType="Boolean")
    @TableField("inheritance_user_group")
    private Boolean inheritanceUserGroup;

    @ApiModelProperty(name="inheritanceRole", value = "是否从父级继承角色, 0-false, 1-tru", dataType="Boolean")
    @TableField("inheritance_role")
    private Boolean inheritanceRole;

    @ApiModelProperty(name="state", value = "状态, 0-停用, 1-正常", dataType="Integer")
    @TableField("state")
    private StateEnum state;
}
